package com.zh.note.huawei.onehundred.整数编码;

/**
 * Integer.toBinaryString(number) 十进制整数转化二进制字符串
 * Integer.parseInt(subStr, 2) 二进制字符串转化为十进制整数
 * Integer.toHexString(temp)  十进制整数转化成16进制字符串
 */
public class Main {
    public static void main(String[] args) {
        // Scanner sc = new Scanner(System.in);
        // int number = sc.nextInt();
        char[] charArray = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'K',
                'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
        int number = 1000;
        if (number < 0) {
            System.out.println("input error");
            return;
        }
        // 十进制转化成二进制
        String numStr = Integer.toBinaryString(number);
        StringBuilder sb = new StringBuilder();
        //标识二进制是否大于7位
        boolean status = false;
        // 先找到低7位
        while (numStr.length() > 0) {
            if (numStr.length() > 7) {
                status = true;
            } else {
                //2进制不足7位补0
                status = false;
                int midIdx = 7 - numStr.length();
                for (int j = 0; j < midIdx; j++) {
                    numStr = "0" + numStr;
                }

            }

            // 截取后7位
            String subStr = numStr.substring(numStr.length() - 7);
            // numStr要去掉后7位
            numStr = numStr.substring(0, numStr.length() - 7);
            if (status) {
                subStr = "1" + subStr;
            } else {
                subStr = "0" + subStr;
            }
            // 将二进制数转化为有符号位的整数
            int temp = Integer.parseInt(subStr, 2);
            // 将整数转化为16进制
            String resultStr = Integer.toHexString(temp);
            //如果16进制不足2位，前面补个0
            if (resultStr.length() < 2) {
                resultStr = "0" + resultStr;
            }
            //如果结果中有字母，要将小写字母转化成大写
            for (int j = 0; j < resultStr.length(); j++) {
                char ch = resultStr.charAt(j);
                if (ch <= 'z' && ch >= 'a') {
                    ch = charArray[ch - 'a'];
                }
                sb.append(ch);
            }
        }
        System.out.println(sb);

    }

}
